libostree: include API docs at build time using a feature flag
authorFelix Krull <f_krull@gmx.de>
Wed, 17 Oct 2018 23:19:26 +0000 (01:19 +0200)
committerColin Walters <walters@verbum.org>
Fri, 6 May 2022 16:53:53 +0000 (12:53 -0400)
rust-bindings/rust/libostree/Cargo.toml
rust-bindings/rust/libostree/build.rs [new file with mode: 0644]

index 0b34ad4a049a39ac778ba67a47e03647ba26d2d5..6a74d13072d432a66f4c168e8e16fb3b5e44a9c3 100644 (file)
@@ -2,9 +2,9 @@
 name = "libostree"
 version = "0.1.0"
 authors = ["Felix Krull"]
+build = "build.rs"
 
 license = "MIT"
-license-file = "LICENSE"
 description = "Rust bindings for libostree"
 keywords = ["ostree", "libostree"]
 
@@ -30,3 +30,11 @@ libostree-sys = { version = "0.1", path = "../libostree-sys" }
 
 [dev-dependencies]
 tempfile = "3"
+
+[build-dependencies]
+gir = { git = "https://github.com/gtk-rs/gir", optional = true }
+rustdoc-stripper = { version = "0.1", optional = true }
+
+[features]
+dox = ["libostree-sys/dox"]
+lgpl-docs = ["gir", "rustdoc-stripper"]
diff --git a/rust-bindings/rust/libostree/build.rs b/rust-bindings/rust/libostree/build.rs
new file mode 100644 (file)
index 0000000..c611c82
--- /dev/null
@@ -0,0 +1,68 @@
+#![allow(dead_code)]
+
+#[cfg(feature = "lgpl-docs")]
+extern crate libgir;
+
+#[cfg(feature = "lgpl-docs")]
+extern crate stripper_lib;
+
+fn main() {
+    #[cfg(feature = "lgpl-docs")] {
+        extract_api_docs().expect("failed to extract API docs");
+        merge_api_docs();
+    }
+}
+
+fn out_dir() -> String {
+    std::env::var("OUT_DIR").expect("missing var OUT_DIR")
+}
+
+fn docs_file() -> String {
+    format!("{}/vendor.md", out_dir())
+}
+
+#[cfg(feature = "lgpl-docs")]
+fn extract_api_docs() -> Result<(), String> {
+    let mut config = libgir::Config::new(
+        Some("../conf/libostree.toml"),
+        libgir::WorkMode::Doc,
+        None,
+        None,
+        None,
+        None,
+        Some(&docs_file()),
+        false,
+        false,
+    )?;
+
+    let mut library = libgir::Library::new(&config.library_name);
+    library.read_file(&config.girs_dir, &config.library_full_name())?;
+    library.preprocessing(config.work_mode);
+    libgir::update_version::apply_config(&mut library, &config);
+    library.postprocessing();
+    config.resolve_type_ids(&library);
+    libgir::update_version::check_function_real_version(&mut library);
+
+    let namespaces = libgir::namespaces_run(&library);
+    let symbols = libgir::symbols_run(&library, &namespaces);
+    let class_hierarchy = libgir::class_hierarchy_run(&library);
+
+    let mut env = libgir::Env {
+        library,
+        config,
+        namespaces,
+        symbols: std::cell::RefCell::new(symbols),
+        class_hierarchy,
+        analysis: Default::default(),
+    };
+
+    libgir::analysis_run(&mut env);
+    libgir::codegen_generate(&env);
+
+    Ok(())
+}
+
+#[cfg(feature = "lgpl-docs")]
+fn merge_api_docs() {
+    stripper_lib::regenerate_doc_comments(".", false, &docs_file(), false, false);
+}